// https://leetcode.cn/problems/group-anagrams/
/*
给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词，所有源单词中的字母通常恰好只用一次。

*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>

using namespace std;

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
		unordered_map<string, vector<string>> res;
		for(auto s : strs){
			string k = s;
			sort(k.begin(), k.end());
			if(res.count(k) > 0){
				res[k].emplace_back(s);
			}else{
				res.insert({k, {s}});
			}
		}
		vector<vector<string>> a;
		for(auto s : res){
			a.push_back(s.second);
		}
		return a;
    }
};

int main(){
	vector<string> a = {"eat", "tea", "tan", "ate", "nat", "bat"};
	Solution so;
	auto res = so.groupAnagrams(a);
	for(auto items : res){
		for(auto item : items){
			cout << item << ",";
		}
		cout << endl;
	}
	return 0;
}